package Test27;

//匿名内部类
/*需要大家理解匿名内部类的格式，而不是硬记:
        new 类名或者接口名(){
         重写方法;
        };
*/
public class Test {
    public static void main(String[] args) {

        //编写匿名内部类的代码（接口）
        new Swim() {
            @Override
            public void swim() {
                System.out.println("重写了游泳的方法");
            }
        };

        //编写匿名内部类的代码（类）
        new Animal() {
            @Override
            public void eat() {
                System.out.println("重写了eat方法");
            }
        };

        //在测试类中调用下面的method方法？
        //以前的方法如何调用？
        //要自己写一个子类继承Animal类
        //再创建子类的对象，传递给method方法

       /* Dog d = new Dog();
        method(d);
        //如果Dog类我只用一次，那么还需要单独定义一个类太麻烦了。*/


        method(

                //匿名内部类
                new Animal() {
                    @Override
                    public void eat() {
                        System.out.println("狗吃骨头");
                    }
                }
        );


    }

    public static void method(Animal a) {//Animal a = 子类对象 （标准的多态）
        a.eat();//编译看左边，运行看右边
    }
}
